perm filename 0[G,BGB] blob sn#086502 filedate 1974-02-14 generic text, type T, neo UTF8
COMMENT ⊗   VALID 00031 PAGES 
RECORD PAGE   DESCRIPTION
 00001 00001
 00004 00002	TITLE PAGE - GEOMED MANUAL.
 00007 00003	INTRODUCTION.
 00010 00004	GEOMED COMMAND SUMMARY:
 00012 00005	GEOMED COMMAND SUMMARY:
 00014 00006	GEOMED COMMAND SUMMARY:
 00016 00007	PRIMER:	INSTANT CUBE, TRANSLATION.
 00020 00008	PRIMER: CONTROL, META, AND META-CONTROL.
 00023 00009	PRIMER:	ROTATION.
 00025 00010	PRIMER:	DRAWING A CUBE.
 00029 00011	PRIMER:	DRAWING A TORUS.
 00030 00012	EXTENDED COMMAND SCANNER.
 00031 00013	COMMAND LETTERS:
 00034 00014	COMMAND LETTERS:
 00036 00015	COMMAND LETTERS:
 00038 00016	COMMAND LETTERS:
 00040 00017	COMMAND LETTERS:
 00042 00018	COMMAND LETTERS:
 00044 00019	GROUP OF COMMANDS:  EUCLIDEAN TRANSFORMATIONS.
 00048 00020	GROUP OF COMMANDS:  STRENGTH OF TRANSFORMATION.
 00051 00021	GROUP OF COMMANDS:  INPUT/OUTPUT.
 00054 00022	GROUP OF COMMANDS:  SWITCHES.
 00056 00023	GROUP OF COMMANDS: LINK FOLLOWING.
 00059 00024	GROUP OF COMMANDS: LINK FOLLOWING.
 00060 00025	GROUP OF COMMANDS: DISPLAY CONTROL.
 00061 00026	COMMAND CHARACTERS:
 00063 00027	COMMAND CHARACTERS:
 00065 00028	COMMAND CHARACTERS:
 00067 00029	COMMAND CHARACTERS:
 00069 00030	COMMAND CHARACTERS:
 00071 00031	            GEOMETRIC MODELING ROUTINES FOR SAIL AND LISP.
 00072 ENDMK
⊗;
TITLE PAGE - GEOMED MANUAL.

SAILON NUMBER 68.			                GEOMED MANUAL


STANFORD ARTIFICIAL INTELLIGENCE LABORATORY                MARCH 1974
OPERATING NOTE NUMBER 68.


                     GEOMED  -  GEOMETRIC EDITOR.


                          Bruce g. Baumgart


ABSTRACT: 

	This operating note explains GEOMED, a package of subroutines
for doing 3-D  geometric modeling. Used from a keyboard, GEOMED is an
interactive drawing  program; used as  a package  of SAIL  accessible
subroutines, GEOMED is  a  graphics command  language. Using  GEOMED,
arbitrary  polyhedra can  be  contructed; moved  about and  viewed in
perspective with hidden lines eliminated.  In  addition to polyhedra;
camera and  image models are provided so  that simulators relevant to
computer vision, problem solving,  and animation can be constructed.

CONTENTS:

	INTRODUCTION.

	I.   COMMAND SUMMARY.
	II.  PRIMER.
	III. KEYBOARD COMMANDS.
	IV.  NODES.

This  research  was  supported  in  part  by  the  Advanced  Research
Projects  Agency of  the  Office of  the Secretary  of  Defense under
Contract No. SD-183.

The views and  conclusions contained  in this document  are those  of
the author and should not  be interpreted as necessarily representing
the  official policies, either expressed or  implied, of the Advanced
Research Project Agency or the United States Government.

INTRODUCTION.

	This SAILON  consists of  two parts:  part one, explains  the
external  keyboard commands of GEOMED  for use as  a drawing program;
and  part  two,  explains  the  internal  SAIL  and  LISP  accessible
subroutines of GEOMED for use as a graphics command language.

	I would like to  warn the novice that GEOMED  (on an absolute
scale)  is not really a  very good program. There  are two causes for
disappointment:  first,  geometric  drawing  requires  careful  prior
thought - for some  reason people who do not expect  a text editor to
generate  a  poem  or  a  program  by  merely "interactive"  keyboard
pounding; seem to think that GEOMED should make what they want to see
without  them  having  to  think  about  it.   The  second  cause  of
disappointment is that the program has not been made very fool proof;
so that blunders (or  novel applications of the commands)  tend to be
fatal.

	The command summary comes at  the beginning of this  document
rather than  at the end  so that the  program itself can  always find
the summary  on pages 4,  5 and 6 of  this file; this document can be
accessed while using GEOMED by typing the "H" help command.
GEOMED COMMAND SUMMARY:

α CONTROL KEY PREFIX.
β META KEY PREFIX.
ε META-CONTROL PREFIX.

:  EUCLIDEAN TRANSFORMATION +X.			  TRANSLATION.
;  EUCLIDEAN TRANSFORMATION -X.			α ROTATION.
)  EUCLIDEAN TRANSFORMATION +Y.			β DILATION.
(  EUCLIDEAN TRANSFORMATION -Y.			ε REFLECTION.
*  EUCLIDEAN TRANSFORMATION +Z.
-  EUCLIDEAN TRANSFORMATION -Z.

/  HALVE STRENGTH.
\  DOUBLE STRENGTH.


!  TRANSLATION DEFAULT SWITCH.
@  ROTATION DEFAULT SWITCH.
=  DILATION DEFAULT SWITCH.
∃  REFLECTION DEFAULT.

π  ACCEPT ROTATION DELTA.
λ  ACCEPT TRANSLATION DELTA.
%  ACCEPT DILATION DELTA STRENGTH.

∂  FLIP NODE DISPLAY SWITCH.
∀  DISABLE BODY OPERATIONS SWITCH.
_  STICKY DISPLAY MODE SWITCH.

↓  COPY PUSH. α↓ ROTATE PUSH.
↑  PADPDL POP. α↑ ROTATE POP.
↔  SWAP STACK (1ST ↔ 2ND)(1ST α↔ 3RD)(1ST β↔ LAST)(2ND ε↔ 3RD)

∩  FETCH DAD LINK,
∪  FETCH SON LINK,
⊂  FETCH BRO LINK.
⊃  FETCH SIS LINK.

<  FETCH NFACE LINK.
>  FETCH PFACE LINK.
≥  FETCH PED LINK.
≤  FETCH NED LINK.
∧  FETCH PVT LINK
∨  FETCH NVT LINK.
,  CLOCKWISE LINK.
.  COUNTER CLOCKWISE LINK.
⊗  FETCH UNIVERSE NODE.
←  FETCH ALT LINK.
→  FETCH ALT2 LINK.
+  OTHER LINK.
GEOMED COMMAND SUMMARY:

α∩ BODY INTERSECTION.
α∪ BODY UNION.
α¬ BODY SUBTRACTION.

¬  BODY EVERT.
$  MAKE CONVEX.
|  INVERT EDGE PARITY.

0-9  SET-DIGIT COMMAND.
?  INFORMATION PREFIX.
#  TWENTY CRLF'S.
∞  INSTANT CUBE. α∞ INSTANT TORUS.

A  ATTACH, βAXECNT.
B  BODY RETRIEVAL.
C  COPY, αC NOW CAMERA.
D  DETACH, αDARKEN, βDUAL, εUNDARKEN.
E  SWEEP WIRE.
F  FRAME STEP SWITCH.

G  GLUE COMMAND.
H  HELP. αH UNHELP.
I  INPUT B3D. αI INPUT CAMERA. βI INPUT CRE.
J  JOIN VERTEX-VERTEX.
K  KILL COMMANDS.
L  LABEL LIGHTS SWITCH.

M  MIDPOINT COMMAND.
N  NAME BODY
O  OUTPUT COMMANDS.
P  OUTPUT PLOT FILE
Q  FRAME ORIGIN SWITCH.
R  ROTATION COMPLETION.

S  SWEEP COMMANDS.
T  CREATE/EDIT TEXT LABEL.
U
V  MAKE VERTEX BODY.

W  MAKE: W WORLD. αW WINDOW. βW CAMERA. εW IMAGE.
X  EXIT GEOMED.
Y
Z  EXECUTE MACRO, αZ CREATE/EDIT MACRO, βZ INPUT COMMAND FILE.

ALT  OCCULT. αALT FRONT FACE. βALT ALL EDGES.
GEOMED COMMAND SUMMARY:

TEXT EDIT COMMANDS:

System line  edit commands, enter line edit mode.

<CR>	Forward 1 line
<VT>	Backward 1 line
αε>	Forward 4 lines
αε<	Backward 4 lines
αε≥	Forward 16 lines
αε≤	Backward 16 lines

εD	Delete a line
εI	Enter line insert mode
αZ	Concatenate next line with current line

αεE	Return to GEOMED
αεV	Update display
αM	Invoke a macro
αN	Take commands from text file

X EXTEND COMMANDS:

X CUBIC DX DY DZ	MAKE CUBIC PRISM.
X BALL  RADIUS M N	MAKE SPHERE M LONGITUDES, N LATITUDES.
X CYLN  RADIUS N DZ	MAKE CYLINDER OF N-SIDES, HEIGHT DZ.

X COLOR 99R 99B 99G 99A	COLOR RED, BLUE, GREEN, ALBEDO.
X NSHARP		MARK ALL EDGES NOT SHARP

X IGEM			INPUT GEM FILE
X OGEM			OUTPUT GEM FILE
PRIMER:	INSTANT CUBE, TRANSLATION.

	This section  is  literally  an  operating  manual;  you  are
supposed  to  be  operating  GEOMED as you read. I will tell you what
keys to type and you will type them to see for yourself what happens;
although  an  explaination  is  given  later  for  each  command, the
complexity of individual commandS  tends  to  obscure  their  use  in
sequences.

	The  system  copy  of  GEOMED is started by typing "R GEOMED"
carriage return at a III  display  console.  GEOMED  will  display  a
window  frame  and  type  an  asterisk  and  await  single  character
commands.   Typing carriage returns will yield more asterisks showing
that GEOMED is alive and listening.

INSTANT CUBE.

	Type the character "∞" to get a drawing of a cube.
	Adjust the pots on the III so that the cube looks right.

TRANSLATION.

   Type the character ":" to move the cube right (positive x axis).
   Type the character ";" to move the cube left (negative x axis).
   Type the character ")" to move the cube up (positive y axis).
   Type the character "(" to move the cube down (negtive y axis).
   Type the character "*" to move the cube nearer (positive z axis).
   Type the character "-" to move the cube away (negative z axis).

	Clearly  these command  characters  are not  mnemonics,  they
were  chosen  because  they  do  not  require  the  TOP key  and  are
conviently grouped in pairs under one's right hand.

STRENGTH OF TRANSLATION.

	The distance the cube is moved by a  translation  command  is
called  the  strength  of  translation  or TDEL. The value of TDEL is
displayed in the upper right corner of the screen  and  is  initially
one foot. The strength of translation is halved by typing the command
character "/" or doubled by typing "\".

WORLD FRAME OF REFERENCE.

	The  direction  the  cube moved was with respect to the world
frame of reference which is a right  handed  coordinate  system,  the
initial  camera  is  positioned  looking down the Z axis at the world
origin. The world origin will be in the center of the display  screen
a  simulated sixteen feet away; and the positive world X axis will be
to your right; and the positive world Y axis will be  up;  until  you
move the camera.
PRIMER: CONTROL, META, AND META-CONTROL.

	Notice that the Stanford A.I. keyboard  has four "shift" keys
labeled SHIFT, TOP,  META & CONTROL. SHIFT only determines whether an
alphabetic letters  is upper  or lower  case;  GEOMED converts  lower
case letters into upper so that the  SHIFT key has no effect. The TOP
key  allows two  ASCII character  codes to  be on each  physical key,
this doubling  up on  the physical keys  is not  important to  GEOMED
since "TOP-E" can  always be referred to as "@".   Finally,  of great
importance, the  CONTROL and  META keys  add two  extra bits  to  the
7-bit ASCII code,  so that a 9-bit character  is sent to GEOMED.   In
this  document the  characters  "α",   "β" and  "ε"  will be  used as
prefix abbreviations for CONTROL,  META and META-CONTROL keying  of a
character.

	Furthermore,     the  GEOMED  command  scanner   accepts  the
characters  "α", "β" and  "ε" as  prefix modifiers that  will add the
appropriate  control  and  meta  bits  to  the  next  character.  The
question  mark character,  explained immediately  below, is  the only
other prefix modifier character.

QUESTION MARK "?".

	Typing  the  question  mark  charcter  "?"  followed  by  any
character will type a one line reminder  of what commands are invoked
by that character.
PRIMER:	ROTATION.

ROTATION.

	The  rotation  command  characters  are  the  same   as   for
translation  except  you must hold the CONTROL key down or prefix the
command with an "α". Try rotating the instant cube about  the  X-axis
with  "α:".  The positive direction of rotation is counter-clockwise.
The negative direction of rotation is clockwise.

STRENGTH OF ROTATION.

	The  strength of rotation is named RDEL, the value of RDEL is
displayed in three formats in the upper  right  hand  corner  of  the
screen:  as  a  pi  fraction;  in  degrees,  minutes, seconds; and in
radians. The initial value of RDEL is π/4, 45 degrees, 0.785 radians.
Analogous  to  translation,  the  strength  of  rotation is halved or
doubled by "α/" and "α\" respectively.

ROTATION DEFAULT.

	Since a sequence of rotations is quite common, there is a way
to make the CTRL key be sticky. The  usual  Euclidean  transformation
default  is translation world frame; but after typing the "@" command
character, the Euclidean default is rotation world frame. Translation
default  is  restored  by  typing  "!".  The  state  of the Euclidean
transformation default is displayed in the GEOMED status.
PRIMER:	DRAWING A CUBE.

	Starting  with  a  fresh  copy  of  GEOMED,  type the command
letters in the second column to get the advertised results:

1.	V	Vertex body creation.
2.	:)	Position the vertex into the first quadrant.
3.	S;;	Make an edge and vertex and move left.
4.	S((	Edge vertex down.
5.	S::	Edge vertex right.
6.	J↑	Join the first and last vertices of the wire.
7.	*	Pull the face lamina towards you.
8.	S	Sweep the square face into a very thin solid.
9.	--↑	Move the face away from you giving the cube depth.
10.	@/):!	Rotate the cube to a more familiar position.

	This example illustrates four commands that haven't been
mentioned yet:

	"V"	Vertex Body Creation.
	"S"	Sweep.
	"J"	Join two vertices with a new edge.
	"↑"	Pop the stack.

These commands take their arguments from and leave their results in a
push down stack of bodies, faces, edges and vertices. The contents of
the stack is displayed on the left hand side of the III screen.

	The  "V"  command  takes  no  arguments and pushs a brand new
body,  face  and  vertex  into  the  stack.  This  degenerate   point
polyhedron  satisfies  the  Euler  equation  F-E+V=2, 1-0+1=2, and is
always placed at the world origin.

	The first three sweep commands in the example, sweep a vertex
polyhedron  into  a  wire polyhedron by adding a new vertex and a new
edge; incidentally preserving  Euler's  equation  as  do  all  GEOMED
commands. The wire-sweep takes a Vertex argument, and returns the new
vertex. The new vertex has the same locus as the argument vertex.

	After three sides of a  square  have  been  formed,  the  "J"
command  creates a new face and a new edge between the first and last
vertex of the wire face. The wire-join case of the "J" command  takes
a  vertex  argument  and identifies it as the end of a wire and knows
enough to fetch the other end of that wire, as its second argument.
PRIMER:	DRAWING A TORUS.

1.	V:@		First Vertex.
2.	S*S*S*		Seven more vertices.
	S*S*S*S*
3.	J↑		Form Lamina.
4.	!//:		Position the lamina.
5.	@S)S)S)S)	Sweep the face around the Y-axis.
	S)S)S)S)
6.	↓>G↑		Glue the ends of the torus together.



EXERCISES.

	1. DRAW THE SOMA CUBES AS IN FIGURE.
	2. DRAW A JACK AS IN FIGURE.
EXTENDED COMMAND SCANNER.

	Extend commands  are executed by  typing "X" followed  by the
first  three letters  (further letters  are  ignored) of  a mnemonic,
followed by any necessary  arguments. The arguments may be  separated
by  any reasonible  delimiters:  space, comma,  tab,  etc. The  first
three extend commands provide easy creation of simple polyhedra.

	X CUBIC deltax,deltay,deltaz
	X BALL  radius,M-longitudes,N-latitudes
	X CYLN	radius,N-sides,DZ-height

COMMAND LETTERS:
"A" - ATTACH.

	This command attachs  the body in the  top of the stack  as a
part of  the body second in the stack. If  the first two entities are
not bodies  then  this command  is a  no  operation. Because  of  the
implementation,  the   parts  structure   is  always  kept   a  tree,
circularities and incest are prevented.

"αA" - ARROWHEADS.
	
	This command labels the length of an  edge with a double head
arrow such as  in a mechanical drawing; a self explaining sub-command
loop allows the arrow to  be positioned and scaled; the "αA"  command
is finished by typing a "Y" for "Yes".

"βA" - AXECNT INCREMENT. (see switchs).

"B" -  BODY GET.

	This command will  replace the edge,  face, or vertex  in the
top of the stack with the body to which it belongs.

"αB" - BODY RETRIEVAL.

"C" - COPY.

	Copy whatever is in the top of the stack in a reasonible manner
and push it down.

"αC" - CAMERA GET.

	Get the now camera node and push it in the stack.

"D" - DETACH.

	Detachs a part from its parent; applies to bodies only.

"αD" - DARKEN.
	
	Set the Darken bit of an edge. A dark edge does not display.

"βD" - DUAL.

	Compute the face/vertex dual  of a body; that is  replace all
the  faces  with  vertices and  all  the  vertices  with faces.  This
command will turn dodecahedrons into icosahedrons.

"εD" - UNDARKEN.

	Clear the Darken bit of an edge.
COMMAND LETTERS:
"E" - ESWEEP. (Obsolete - subsumed by sweep).

	This command creates a new edge and  a  new  vertex  starting
from  an  old  vertex.  The E command requires two arguments, the top
argument is the old vertex and the second argument must be one of the
faces  to  which  the vertex belongs.  The new edge and vertex become
associated with the given face.

"αE" - UNDEFINED.

"βE" - UNDEFINED.

"εE" - EXIT.

	Exit the GEOMED  editor. Returns control to monitor  level or
to  user program level. GEOMED  returns the entity at  the top of its
stack.

"F" - FRAME STEP. (see switchs).

"αF" - SET FOCAL.

	This command  will type out  the focal length  in millimeters
of  the "now" camera and  will ask for  a new value.  Give a carriage
return or zero to indicate no change.

"βF" - FRAME STEP BACK. (see switchs).

"εF" - UNDEFINED.

"G" - GLUE TWO FACES TOGETHER.

	This  command  takes  two  faces from the top of the pdl. The
faces must be nearly coincidant and of opposite orientation. The  two
faces  are  deleted  along  with all the edges and vertices of one of
them.  If there were two bodies, then one remains. A  body  glued  to
itself  forms  a  hole.
COMMAND LETTERS:
"H" - HELP.

	This command allows the user to read  this document a page at
a  time while  using  GEOMED. Help  starts by  displaying  page-4 and
waits for other desired page  numbers; typing a carraige return  will
exit the  help with the  display persisting, control  carraige return
will exit the help with the display cleared.

"αH" - UNHELP.

	Clear the HELP display glass.

"I" - INPUT COMMANDS. (See I/O group).

"J" - JOIN VERTICES.

	This  command  creates  a  new  face  and  a new edge.  The J
command has two forms.  The general form of the J command expects two
vertices  of  the same face to be given on the top of the pdl, and it
returns in their place a new edge and a new face  with  the  edge  on
top.
	The wire form of the J command applies only to  a  face  that
doesn't  have  a  closed perimeter.
The wire J
command returns the other end of the  wire  in  top  and  leaves  the
second argument unchanged.

"K" - KILL.

	This  command  takes  the  top body, face, edge or vertex and
deletes it in a reasonible manner.

"L" - TOGGLE LIGHTS SWITCH. (see switchs).
COMMAND LETTERS:
"M" - MIDPOINT.

	This  command  takes an edge argument and creating a new edge
and a new vertex makes the appropriate modifications to the body  and
returns a the midpoint vertex of the given edge.

"N" - NAME A BODY.

	This command  accept the next  ten characters  typed in as  a
name  for the body  in the  top of the  stack; any characters  can be
used in a name.

"O" - OUTPUT COMMANDS. (See I/O commands).

"P" - PLOT.

"Q" - QFLAG TOGGLE. (See switchs).
	
"R" - Rotational Solid Completion.

	After  a  wire  has  been  swept  around, you have a shell of
rotation.  To change a shell into a solid all that remains to be done
is  do  a series of J commands on the leading and lagging vertices of
the shell. The R command, using the NCNT  to  step  around  the  pole
caps, calls the J-command for all the necessary pairs. The sweep face
is taken as an argument and nothing is returned.
COMMAND LETTERS:
"S" - SWEEP.

	This  command  sweeps  a  face into either a sheet or a solid
depending on the NCNT. If the NCNT is zero, then SWEEP returns a  new
face  coincident with the given face and connected to it by new sweep
edges and rectangular sweep faces forming a prism.  Furthermore, a  β
sweep  forms a pyramid on the given face and returns the peak vertex,
while α sweep and ε sweep form antiprisms. An antiprism is  merely  a
prism with the rectangular sweep faces split into triangles.

	When the NCNT is non-zero, only the first NCNT edges  of  the
argument  face's  perimeter are swept into new faces.   Thus NCNT new
faces are created and the argument face  is  returned  somewhat  more
complicated  than  before. See the SPHERE example to clarify sweeping
out a solid of rotation.

"T" - TEXT.

"αT" - TAKE A PICTURE.

"βT" - TRIANGULAR SWEEP PRISMOID CW. (obsolete).

"εT" - TRIANGULAR SWEEP PRISMOID CWW. (obsolete).

"U" - NO OPERATION.
COMMAND LETTERS:
"V" - VERTEX BODY CREATION.

	This command  creates a polyhedron  consisting of  one vertex
and  one face.   The  vertex is  placed  at the  world origin.  The V
command takes no arguments and  leaves the new body, face and  vertex
on the stack with the vertex on top.

"W"  - MAKE WINDOW IN NOW DISPLAY RING.

"αW" - MAKE WINDOW IN NEW DISPLAY RING.

"βW" - MAKE NEW WORLD.

"X" - EXTENDED COMMAND SCANNER. (see EXTEND COMMANDS).

"Y" - NO OPERATION.

"Z" - MACRO CALL.

	Macros are actually bodies  with one vertex with a  text node
list  containing the text  of the macro;  such bodies have  a name or
numeral which may  be typed after  the Z command  gives you a  colon;
there are  no dummy arguments  and the  macro string is  run directly
thru the command scanner as it was given.

"αZ" - MACRO EDIT.

	This command is for defining and for altering macro command
strings. The minature text editor is like E and is explained under
TEXT commands.

"βZ" - FILE CALL.

	This command asks for a file name and then executes the string
of commands in that file.
GROUP OF COMMANDS:  EUCLIDEAN TRANSFORMATIONS.

The Euclidean  geometric transformations  are translation,  rotation,
dilation  and  reflection; these  transformations do  not  affect the
topology of  faces,  edges and  vertices. The  top  of the  stack  is
transformed  by  hitting one  of  the  following Euclidean  transform
characters:

  :	Transform in the positive direction wrt the X-axis.	
  ;	Transform in the negative direction wrt the X-axis.
  )	Transform in the positive direction wrt the Y-axis.
  (	Transform in the negative direction wrt the Y-axis.
  *	Transform in the positive direction wrt the Z-axis.
  -	Transform in the negative direction wrt the Z-axis.

Clearly these characters are not mnemonics, they were chosen  because
they do not require the TOP key and are conveniently grouped in pairs
under one's right hand.

The transform is selected by keying the control bits or or  prefixing
the  command  with a control key character of suffering a preselected
default Transform:

		default  -  usually TRANSLATION.
α      		ROTATION.
β		DILATION.
ε	 	REFLECTION.

The Euclidean Transformation default selection characters are:

!		TRANSLATION.
@		ROTATION.
=		DILATION.
∃		REFLECTION.

	Translation moves the  top object in the  direction specified
by  one unit  of translation strength.   Similairly  Rotation rotates
the top object  about the axis  specified by  one unit of  rotational
strength. Positive rotations are ccw and negative rotations are cw.

	Dilations  refer to  a  three state  dilation axis  selector.
Dilation  state 1  causes  dilation on  the specified  axis, dilation
state 2 causes dilation on the two axes not  indicated,  and dilation
state 3  causes dilation on all  the axes.  The  dilation selector is
advanced by typing "A".  The state of the  dilation axis selector  is
displayed as  a digit 1,  2 or 3  just to the  right of  the dilation
strength's  per cent sign in  the editor status display  at the upper
right of the III  screen. And finally,   Reflections act only on  the
axis specified and always in the world frame of reference.
GROUP OF COMMANDS:  STRENGTH OF TRANSFORMATION.

The strength of a Euclidean transformation can be halved or
doubled by keying the transform's control bits and by striking
a left or right square bracket respectively.

	/	Halve a Transformation Strength.
	\	Double a Transformation Strength.

The strength of a Euclidean Transformation can be set by keying the
Transform's control bits and by striking a digit from 0 to 9.

For Translation:
	0	1/16 of a foot,  A "binary inch".
	4	One Foot.
	9	32 Feet.
	N	Where 0 ≤ N ≤ 9 yield 2.0↑(N-4) feet,
		but you only need to memorize the 0,4,9 in
		order to keep your head straight.
For Rotation:
	9	π/2
	8	π/4
	   etc
For Dilation:
	0	100%
	1	10%
	2	20%
	   etc
	9	90%

	The strengths of the Euclidean Transformations can be entered
numerically by typing λ,π or % followed by a numerical argument.   In
command formats given below x & y are scanned as real numbers,  while
n,  m,  d & s are scanned as integers. Integers can be typed in place
of reals with no ill affect, whereas reals  typed  for  integers  are
Fixed.

For Translation:
	λx	feet.		Initially set to 1 foot.
	λx'	feet.
	λx'y"	feet and inches.
	λy"	inches.
For Rotation:
	ππ/m	pi fraction.	Initially set to π/4.
	πn/m	pi fraction.
	πx	radians.
	πd,m,s	degrees, minutes, seconds of arc.
For Dilation:
	%x	0.01 ≤ x ≤ 100.00.  Divisions by zero are shunned.
		Initial set to 75%

GROUP OF COMMANDS:  INPUT/OUTPUT.

"I"	input B3D file.		"O"	output B3D file.
"αI"	input CAM file.		"αO"	output CAM file.
"βI"	input CRE film.		"βO"	output TRI file.
"εI"	input D3D file.		"εO"	output D3D file.
X IGEM	input GEM file.		X OGEM	output GEM file.

"βZ"	take commands from GEO file.
"P"	output PLT file of current III buffer.


	"I" and "O" are the commands for  input and output. There are
three file  formats for polyhedra named B3D,  D3D, and GEM. The plain
"O" command will output  a body (and all its  parts) from the top  of
the stack into  a B3D file. The  plain "I" command will  input a body
(and all its parts) from a B3D file and will push it on the stack.

	The "X IGEM" and "X OGEM" are  extend commands that work like
"I"  and "O", but are  dumping and restoring more  of the contents of
each body, face, edge and vertex for the sake of GEOMES (SAIL) users.

	The "αI" and "αO" input and output CAM files to and from the
node of the "now" camera.

	The D3D format  is the "dump"  mode format. On  output, "εO",
the  node space  is compacted  and the origin  is subtracted  off all
links ("un"-relocatation) and the whole node space is dumped  out; on
input the space is read in and relocated.

	The "βI"  inputs a CRE  film and places  a film  of perceived
CRE  images  on the  "now"-camera's  node. The  "βO"  command  is for
outputing the "now"-predicted image  into a TRI file (triangles)  for
the sake  of MKVID (make video)  which does the scan  line conversion
for synthesizing video images.
GROUP OF COMMANDS:  SWITCHES.

switch		commentary


Q - FRMORG
	FRMORG affects world frame rotations.
	TRUE *		rotation about a world axis,
			thru the world origin.
	FALSE		rotation about a parallel to a world axis,
			thru the body origin.
	FRMORG is flipped by the Q-command.
	The state of FRMORG is indicated by an asterisked in the
	Editor's Status Display.  The asterisk is present when
	FRMORG is true and absent when FRMORG is false.

F - FRAME
	FRAME is a three state switch that affects translation,
	rotation and dilation.
	state-1	indicates World Frame of Reference.
	state-2	indicates Body  Frame of Reference.
	state-3	indicates Relative Frame of Reference.
	FRAME is incremented, modulo 3, by the F-command.
	(and decremented modulo 3 by the βF command).

A - AXECNT
	AXECNT affects  only dilations.
	state-1 indicates dilation only on the specified axis.
	state-2 indicates dilation on the two axes not specified.
	state-3 indicates dilation on all three axes.
	The state of dilation is indicated by a digit to the right of
	the dilation strength's percent sign in the GEOMED Status Display.
	AXECNT is incremented, modulo 3, by the A-command.
GROUP OF COMMANDS: LINK FOLLOWING.

The GEOMED data structure is composed of 16 kinds of nodes:

	FRAME		EMPTY 		UNIVERSE	SUN
	CAMERA		WORLD		WINDOW		IMAGE
	TEXT		XNODE		YNODE		ZNODE
	BODY		FACE		EDGE		VERTEX

The  root of  the  data  structure is  the  UNIVERSE node,  which  is
unique,  and  which can  be pushed  into  the stack  by hitting  the "⊗"
command. Directly  accessible from the  UNIVERSE node,  the user  may
fetch the DISPLAY ring and the WORLD ring:

	"∩" of the UNIVERSE	returns the "now" WORLD.
	"∪" of the UNIVERSE	returns the "first" WORLD.
	"." of the UNIVERSE	returns the "now" display.
	"," of the UNIVERSE	returns the "first" display.

A display  is  not a  node,  but is  rather a  ring  of windows.  The
refresh subroutine GEODPY,  refreshs the windows of the "now" display
ring.

	"⊂" and "⊃" of a WINDOW travels the Window Ring of a display.
   	"." and "," of a WINDOW travels the Display Ring of the UNIVERSE.

Each world has at least one camera, one  sun, and a ring of
bodies (which is initially empty).

	"←" of a WORLD		returns the "first" SUN.
	"∩" of a WORLD		returns the "now" CAMERA.
	"∪" of a WORLD		returns the "first" CAMERA.
	"." and "," of a WORLD travels the World's Body Ring.
	"⊂" and "⊃" of a WORLD travels the World Ring of the UNIVERSE.

Each camera points back  to the world to which it  belongs ("∪"); and
belongs  to   that  worlds  camera  ring  ("⊂"   and  "⊃");  and  has
potentially two rings  of images: the sythetic  image ring (".")  and
the perceived image ring (",").
GROUP OF COMMANDS: LINK FOLLOWING.

	A  polyhedral  surface  is  composed   of  faces,  edges  and
vertices.  Each particular face, edge,  or vertex belongs  to one and
only one body; and in turn each  body has a ring of faces, a ring  of
edges and a ring of vertices:

	"<" and ">" of a body travels the Face Ring of that body.
	"≤" and "≥" of a body travels the Edge Ring of that body.
	"∨" and "∧" of a body travels the Vertex Ring of that body.
GROUP OF COMMANDS: DISPLAY CONTROL.

COMMAND CHARACTERS:
null	NO OPERERATION.

"↓"	COPY PUSH. (see stack commands).
"α↓"	ROTATE PUSH. (see stack commands).
"β↓"	UNDEFINED.
"ε↓"	UNDEFINED.

"α"	CONTROL KEY PREFIX.

	This  command   forces  the   next  command   letter  to   be
interpreted  as  if  it  were  hit  with  the  control  key;  this
convention is for the sake of defining macros and command files.

"β"	META KEY PREFIX.

"∧"	FETCH PVT.

	Get positive vertex of an edge. Or ring around the vertex ring.

"¬"	BODY EVERT.

	GEOMED polyhedra have  an inside and an  outside irrespective
of enclosing  a finite volume; that  is a thing that  appears to be a
cube can either be a solid in space or a space in a solid.  The EVERT
command turns solids into holes and holes into solids.

"α¬"	BODY SUBTRACTION.

	Subtract the top  of the stack  body from the body  second in
the  stack. Where  subtraction means  union of the  evert of  the TOP
with the SECOND.

"ε"	META-CONTROL KEYS PREFIX.

"π"	SET ROTATION STRENGTH.

"λ"	SET TRANSLATION STRENGTH.
COMMAND CHARACTERS:

TAB	NO OPERATION.
LF	NO OPERATION.
VT	NO OPERATION.
FF	NO OPERATION.

CR	ALMOST NO OPERATION.

	Clears  the iteration  count  and causes  an  asterisk to  be
typed out.

"∞"	INSTANT CUBE. (See Primer).

"α∞"	INSTANT TORUS. (see Primer).

"∂"	DATUM DISPLAY TOGGLE.

	Causes the contents  of the node at  the top of the  stack to
be displayed  in the lower right hand corner  of the screen. The LINK
following  commands  for  the   different  words  of  the  node   are
indicated.

"⊂"	FETCH BRO LINK.
"⊃"	FETCH SIS LINK.
"∩"	FETCH DAD LINK.
"α∩"	BODY INTERSECTION.
"∪"	FETCH SON LINK.
"α∪"	BODY UNION.

"∀"	Disable Body Transformations Switch. (for wizards only).

"∃"	REFLECTION DEFAULT. (obsolete).

"⊗"	FETCH UNIVERSE NODE.

"↔"	SWAP FIRST AND SECOND ELEMENTS OF THE STACK.
"α↔"	SWAP FIRST AND THIRD...
"β↔"	SWAP FIRST AND LAST...
"ε↔"	SWAP SECOND AND THIRD...

"_"	STICKY DISPLAY MODES SWITCH.

"→"	FETCH ALT2 LINK.

"~"	TILDE NO OPERATION.

"≠"	NO OPERATION.
COMMAND CHARACTERS:

"≤"	FETCH NED LINK.
"≥"	FETCH PED LINK.

"≡"	STATUS DISPLAY TOGGLE.

	The GEOMED status (the stack, tranformation strenght, etc.) at
the top of the screen are turned on and off by this command.

"α≡"	TOGGLE NOW WINDOW'S DARKEN BIT.

	This command will turn the window border on and off.

"∨"	FETCH NVT LINK.

" "	GEODPY REFRESH.

	The spacebar will cause the current display to be refreshed.

"!"	TRANSLATION DEFAULT.

"""	DOUBLE QUOTE MARK - NO OPERATION.

	Never, never shall this character be used for a command.

"#"	TWENTY CRLF's.

	Well actually three line feeds, for clearing the page printer.

"α#"	ENTER DDT.

	Enters DDT if  it exists.   The SYS versions of  GEOMED never
have  DDT; the  versions  GEOMED.DMP[GEM,HE] and  G.DMP[GEM,BGB] will
usually have DDT; and  a GEOMES core image  has DDT depending on  how
the  compile and  load was  done. A  DDT "αP"  command will  continue
execution in the GEOMED listen loop.
COMMAND CHARACTERS:

"$" - MAKE CONVEX.

	This command may be applied to a face or a body. All the
faces referred to will be split into triangles.

"α$" - ESLURP.

"%" - SET DILATION STRENGTH.

"&" - NO OPERATION.

"'" - NO OPERATION.

"(" - EUCLIDEAN TRANSFORMATION -Y.
")" - EUCLIDEAN TRANSFORMATION +Y.
"*" - EUCLIDEAN TRANSFORMATION +Z.
"+" - FETCH OTHER.

"." - FETCH CLOCKWISE.
"-" - EUCLIDEAN TRANSFORMATION -Z.
"," - FETCH COUNTER CLOCKWISE.

"/" - HALVE Translation STRENGTH.
"α/" - HALVE Rotation STRENGTH.

"0123456789" - Set Digit Commands.
":" - EUCLIDEAN TRANSFORMATION +x.
";" - EUCLIDEAN TRANSFORMATION -X.
"<" - FETCH NFACE LINK.
"=" - DILATION DEFAULT SWITCH. (obsolete).
">" - FETCH PFACE LINK.
"?" - INFORMATION PREFIX.
"@" - ROTATION DEFAULT SWITCH.

"[" - NO OPERATION.
"\" - DOUBLE Translation STRENGTH.
"α\" - DOUBLE Rotation STRENGTH.
"]" - NO OPERATION.
"↑" - POP Stack.
"α↑" - ROTATE POP.
"←" - FETCH ALT LINK.
"`" - NO OPERATION.

COMMAND CHARACTERS:

"{"	STEP + NOW DISPLAY.
"α{"	STEP + NOW WORLD.
"β{"	STEP + NOW CAMERA.

"|"	INVERT AN EDGE.

 ALT	DISPLAY REFRESH with hidden lines eliminated.
αALT	DISPLAY REFRESH with back side faces eliminated.
βALT	DISPLAY REFRESH everything visible.
εALT	DISPLAY REFRESH hidden line elimination diagonostics.

"}"	STEP - NOW DISPLAY.
"α}"	STEP - NOW WORLD.
"β}"	STEP - NOW CAMERA.

RUBOUT	NO OPERATION.
COMMENT ⊗   VALID 00012 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	            GEOMETRIC MODELING ROUTINES FOR SAIL AND LISP.
C00005 00003	INTRODUCTION
C00006 00004	PRIMER
C00011 00005	PRIMER - EXAMPLE 1
C00013 00006	PRIMER -
C00016 00007	MEMORY - INTRODUCTION TO THE DATA STRUCTURE.
C00018 00008	MEMORY - TOP LEVEL GEM STRUCTURE.
C00021 00009	CONTROL - SUBROUTINE CALLS.
C00025 00010	CONTROL -
C00028 00011	CONTROL -
C00030 00012	ADDENDUM -
C00033 ENDMK
C⊗;
            GEOMETRIC MODELING ROUTINES FOR SAIL AND LISP.


                          Bruce g. Baumgart


ABSTRACT: